package cn.tedu.charging.order.mqtt;

import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * MQTT生产者
 * 消息发送者
 * 订单给服务EMQX发送消息  (订单通过MqttProducer向EMQX发送消息)
 *
 *  * @Configuration    @Component 区别
 *  * 都是让spring 容器管理 Configuration 一个是配置相关的组件  Component 一个是和具体业务无关组件
 */
@Slf4j
@Component
public class MqttProducer {

    @Autowired
    private MqttClient mqttClient;
    //topic 主题的意思  payload消息的意思 字节的数组 byte[] payload  保留 retained
    public Boolean send(String topic, String message){
        Boolean success = false;
        //topic 主题的意思    是啥 todo
        //payload  是那个消息
        //消息还有个质量的意思
        //retained  是否保留

        //message.getBytes()是具体的消息 需要把消息转换为字节数组  String.getBytes() 字符串的方法 获取字节数组
        //质量是啥？  todo
        //保留是啥？ todo
        //publish（） 出版 发行 发布  （发送消息）
        try {
            mqttClient.publish(topic,message.getBytes() ,0,false);
            success = true;

        } catch (MqttException e) {
            log.error("给EMQX发送消息失败，Topic:{},消息:{}",topic,message, e);
        }
        return success;
    }
}
